@@ -2822,9 +2822,15 @@ int main(int argc, char **argv)
2822
2822
2823
2823
std::atomic<server_state> state{SERVER_STATE_LOADING_MODEL};
2824
2824
2825
- svr.set_default_headers ({{" Server" , " llama.cpp" },
2826
- {" Access-Control-Allow-Origin" , " *" },
2827
- {" Access-Control-Allow-Headers" , " content-type" }});
2825
+ svr.set_default_headers ({{" Server" , " llama.cpp" }});
2826
+
2827
+ // CORS preflight
2828
+ svr.Options (R"( .*)" , [](const httplib::Request &req, httplib::Response &res) {
2829
+ res.set_header (" Access-Control-Allow-Origin" , req.get_header_value (" Origin" ));
2830
+ res.set_header (" Access-Control-Allow-Credentials" , " true" );
2831
+ res.set_header (" Access-Control-Allow-Methods" , " POST" );
2832
+ res.set_header (" Access-Control-Allow-Headers" , " *" );
2833
+ });
2828
2834
2829
2835
svr.Get (" /health" , [&](const httplib::Request&, httplib::Response& res) {
2830
2836
server_state current_state = state.load ();
@@ -2987,9 +2993,9 @@ int main(int argc, char **argv)
2987
2993
return false ;
2988
2994
});
2989
2995
2990
- svr.Get (" /props" , [&llama](const httplib::Request & /* req*/ , httplib::Response &res)
2996
+ svr.Get (" /props" , [&llama](const httplib::Request & req, httplib::Response &res)
2991
2997
{
2992
- res.set_header (" Access-Control-Allow-Origin" , " * " );
2998
+ res.set_header (" Access-Control-Allow-Origin" , req. get_header_value ( " Origin " ) );
2993
2999
json data = {
2994
3000
{ " user_name" , llama.name_user .c_str () },
2995
3001
{ " assistant_name" , llama.name_assistant .c_str () }
@@ -2999,6 +3005,7 @@ int main(int argc, char **argv)
2999
3005
3000
3006
svr.Post (" /completion" , [&llama, &validate_api_key](const httplib::Request &req, httplib::Response &res)
3001
3007
{
3008
+ res.set_header (" Access-Control-Allow-Origin" , req.get_header_value (" Origin" ));
3002
3009
if (!validate_api_key (req, res)) {
3003
3010
return ;
3004
3011
}
@@ -3066,8 +3073,9 @@ int main(int argc, char **argv)
3066
3073
}
3067
3074
});
3068
3075
3069
- svr.Get (" /v1/models" , [¶ms](const httplib::Request&, httplib::Response& res)
3076
+ svr.Get (" /v1/models" , [¶ms](const httplib::Request& req , httplib::Response& res)
3070
3077
{
3078
+ res.set_header (" Access-Control-Allow-Origin" , req.get_header_value (" Origin" ));
3071
3079
std::time_t t = std::time (0 );
3072
3080
3073
3081
json models = {
@@ -3085,9 +3093,11 @@ int main(int argc, char **argv)
3085
3093
res.set_content (models.dump (), " application/json; charset=utf-8" );
3086
3094
});
3087
3095
3096
+
3088
3097
// TODO: add mount point without "/v1" prefix -- how?
3089
3098
svr.Post (" /v1/chat/completions" , [&llama, &validate_api_key](const httplib::Request &req, httplib::Response &res)
3090
3099
{
3100
+ res.set_header (" Access-Control-Allow-Origin" , req.get_header_value (" Origin" ));
3091
3101
if (!validate_api_key (req, res)) {
3092
3102
return ;
3093
3103
}
@@ -3161,6 +3171,7 @@ int main(int argc, char **argv)
3161
3171
3162
3172
svr.Post (" /infill" , [&llama, &validate_api_key](const httplib::Request &req, httplib::Response &res)
3163
3173
{
3174
+ res.set_header (" Access-Control-Allow-Origin" , req.get_header_value (" Origin" ));
3164
3175
if (!validate_api_key (req, res)) {
3165
3176
return ;
3166
3177
}
@@ -3233,6 +3244,7 @@ int main(int argc, char **argv)
3233
3244
3234
3245
svr.Post (" /tokenize" , [&llama](const httplib::Request &req, httplib::Response &res)
3235
3246
{
3247
+ res.set_header (" Access-Control-Allow-Origin" , req.get_header_value (" Origin" ));
3236
3248
const json body = json::parse (req.body );
3237
3249
std::vector<llama_token> tokens;
3238
3250
if (body.count (" content" ) != 0 )
@@ -3245,6 +3257,7 @@ int main(int argc, char **argv)
3245
3257
3246
3258
svr.Post (" /detokenize" , [&llama](const httplib::Request &req, httplib::Response &res)
3247
3259
{
3260
+ res.set_header (" Access-Control-Allow-Origin" , req.get_header_value (" Origin" ));
3248
3261
const json body = json::parse (req.body );
3249
3262
std::string content;
3250
3263
if (body.count (" tokens" ) != 0 )
@@ -3259,6 +3272,7 @@ int main(int argc, char **argv)
3259
3272
3260
3273
svr.Post (" /embedding" , [&llama](const httplib::Request &req, httplib::Response &res)
3261
3274
{
3275
+ res.set_header (" Access-Control-Allow-Origin" , req.get_header_value (" Origin" ));
3262
3276
const json body = json::parse (req.body );
3263
3277
json prompt;
3264
3278
if (body.count (" content" ) != 0 )
0 commit comments