Tại sao phần trăm đăng nhập trong URL gây ra lỗi Yêu cầu xấu HTTP 400?


22

Tôi tình cờ phát hiện ra điều này khi nhập nhầm URL cho một trang web trong trình duyệt web của mình.

Tại sao truy cập http://example.com/%gây ra lỗi Yêu cầu xấu HTTP 400 bị ném? Là máy chủ mong đợi một cái gì đó khác sau hoặc trước dấu phần trăm?

Nó dường như xảy ra cho các máy chủ Apache và Nginx.


Câu trả lời:


32

Câu trả lời ngắn

Theo RFC 3986 , một %ký tự trống không phải là cú pháp URI hợp lệ ; nó nên được theo sau bởi hai chữ số thập lục phân có ý nghĩa .

Câu trả lời dài

Các HTTP mã trạng thái bạn đã thuộc về 4xxlớp:

4xx: Client Error - The request contains bad syntax or cannot be fulfilled

Nguồn: Đăng ký mã trạng thái giao thức truyền siêu văn bản (HTTP)

Cụ thể, mã 400được xác định bởi Lực lượng đặc nhiệm kỹ thuật Internet (IETF) trong RFC 2616:

10,4.1 400 Yêu cầu xấu

Máy chủ không thể hiểu được yêu cầu do cú pháp không đúng. Khách hàng KHÔNG NÊN lặp lại yêu cầu mà không sửa đổi.

Nguồn: RFC 2616 - Giao thức truyền siêu văn bản - HTTP / 1.1

Trích dẫn Wikipedia (nhấn mạnh đậm của tôi):

Các ký tự được phép trong URI được bảo lưu hoặc không được bảo vệ ( hoặc ký tự phần trăm là một phần của mã hóa phần trăm ).

Nguồn: Mã hóa phần trăm - Mã hóa phần trăm trong một URI

Nếu bạn muốn chèn một ký %hiệu bằng chữ , bạn cần sử dụng biểu diễn được mã hóa theo phần trăm của nó : %25.

đọc thêm


Tôi không hiểu Nếu tôi che dấu ký hiệu '%' với '% 25', tệp sẽ vẫn không được cung cấp nhưng lỗi 400 sẽ bị ném trong kịch bản của chúng tôi (Apache -> JKMount -> Tomcat)
fiffy

Nếu bạn có RewriteRule sau RewriteRule (.*) xyz/$1(trong đó xyz là bất kỳ tên thư mục nào) trong .htaccess, bạn nên nhân đôi % mã hóa thành% 2525.
Marco Marsala

9

Dấu phần trăm là để chèn một ký tự thường không được hỗ trợ trong url. Ví dụ% 20 giống như một khoảng trắng.


4
Và để chèn một phần trăm ký tự, đó là%25
Robotnik

A +là một cách tắt để mã hóa một không gian. Nếu bạn muốn có một dấu cộng thực, hãy sử dụng mã hex của nó,% 2B.
Phil Perry

3
+ là mã hóa chính xác cho một khoảng trắng chỉ trong chuỗi truy vấn. % 20 là mã hóa chính xác ở nơi khác trong url.
Eden Townsend
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.